Майнор "Интеллектуальный анализ данных"

Курс "Введение в анализ данных"

Лабораторная работа №2. Кластерный анализ.

Часть 1

В данном задании вам необходимо самостоятельно реализовать один из алгоритмов кластеризации.
По аналогии с классами в scikit-learn, нужно реализовать класс, наследуемый от Base Estimator.
Подробнее про реализацию своих моделей в scikit-learn: here.
В классе помимо __init__() нужно реализовать два метода:

Для удобства можно создавать дополнительные методы класса, которые будут вызываться в fit() или predict().
Функции для вычисления расстояний между объектами самим реализовывать не нужно, используйте реализации из scipy.

All Imports

DBSCAN

Вариант №2

Алгоритм Dbscan.

Параметры:

Атрибуты:

Метод predict(): Для нового объекта вычисляется число основных точек из каждого кластера, попавших в окрестность $\varepsilon$. Объект определяется в кластер с наибольшим числом таких точек.
Note: Метод predict() не выполняется в случае, когда metric - это матрица расстояний.

Тестирование

Вашу реализацию необходимо сравнить с питоновской реализацией алгоритма из sklearn или scipy. Результаты кластеризации должны совпадать.
Также необходимо сравнить скорость работы вашей реализации и питоновской (это нормально, если ваша реализация будет медленнее).
Сравнение необходимо выполнить на наборе данных iris.

Масштабирование набора данных

Моя реализация DBSCAN

Sci-kit learn DBSCAN

Проверка различий между кластаризациями

Result: нет различий в выходах алгоритмов

Predict

Небольшое подведение итогов:

Часть 2

В данном задании вам предлагается проанализировать набор данных по различным городам США. Каждый город характеризуется следующими признаками:

Notes:

Задания

  1. Выполните необходимую предобработку данных. Перед кластеризацией исключите из данных признаки Place, Long и Lat.
  1. Выполните кластеризацию иерархическим методом.
    Рассмотрите различные расстояния между объектами. Определите, какие следует использовать при кластеризации.
    Выполните кластеризацию с различными расстояниями между кластерами. Сравните результаты, сделайте выводы.
  1. Выполните кластеризацию методом Dbscan. Используйте расстояния между объектами, определенные в предыдущем пункте.
    Реализуйте эвристику (см. лекции) для выбора параметров алгоритма. Подберите подходящие параметры алгоритма.
  1. Выполните кластеризацию методом kmeans. Определите наилучшее (на ваш взгляд) число кластеров.
  1. (Бонусное) Выполните кластеризацию другими методами. Например, HDBSCAN или алгоритмы, реализованные в scikit-learn.
  1. В результате выполнения предыдущих пунктов вы должны получить 4 или больше разбиений объектов (по одному на каждый метод). Сравните их между собой, сделайте выводы о сходствах и различиях.
    Оцените результаты каждой кластеризации, используя метрики, рассмотренные на занятиях (Silhouette и прочие).
  1. Выберите одно разбиение, наиболее подходящее на ваш взгляд. Предложите интерпретацию полученным кластерам или покажите, что этого сделать нельзя.
  1. Оцените, как полученные кластеры распределены географически.
    Оцените, как полученные кластеры распределены по штатам. Можно ли выделить какую-то зависимость (территориальную или для штатов)?
    (Бонусное) Провизуализируйте распределение на карте США.

Задание 1. Предварительная обработка

Пропусков нет, все значения в интах

Задания 2. Иерархии

Ward + Euclidean

Ward + Euclidean Версия 2 (4 кластера)

Сделаем 4 кластера

Complete + Euclidean

**Вывод: 4 - й кластер состоит только из одного элемента (212 элемент- левая зеленая линия)

Complete + CityBlock

**Вывод: один из кластеров является только одним элементом, как и в случае с евклидовой метрикой, но теперь оранжевая часть графика имеет менее очевидное расщепление

Complete + Cosine

Вывод: по участкам на главной диагонали видно, как все кластеры сливаются друг с другом, получается плохая кластеризация

Median + Euclidean

Weighted + CityBlock

Weighted + Euclidean

Общие результаты

Метрика
Euclidean and Ward (3 labels)
CityBlocks and Complete

Заключение:

Многие из вариантов кластеризации имеют крайне неравномерное распределение (1 гиганский кластер) или плохую метрическую оценку.

Самые кайфовые:

Задание 3. DBSCAN

Euclidean

1 big кластер и many выбросов, попробуем фиксить уменьшением min_samples и увеличением epsilon

Энивей хоть и 2 кластера 1 из них очень большой

Cosine

даже с разными аргументами получается 1 кластер без выбросов

CityBlock

ROFL толькО одни выбросы

можно попробывать увеличить epsilon, чтобы поискать основые узлы

OMG Появился целый один кластер и при этом остались выбросы

можем понизить min_samples до 3 и посмотрим

На выходе мы получили:

Заключение:

DBSCAN в большинстве вариантов дает один огромный кластер либо еще пару микрокластеров(not good).
Плюс к этому DBSCAN получает много выбросов иногда больше половины.

Для этих данных DBSCAN является неудачным выбором

Можно еще понадрываться и поизменять данные в цикле, но энивей это не даст намного лучшего результата

Задание 4. K-means

Заключение:

Я использовал elbow method для алгоритма K-means. На графике инерции видно, что значительный изгиб находится вблизи 10 кластеров.Но оценить качество кластеризации даже после объединения со столбцами географических объектов довольно сложно. Ограничим участок 20 кластерами. Мы можем наблюдать заметное изменение скорости убывания в точке из 5 кластеров. В результате я попробывал с 4 и 5 кластерами. Подводя итоги визуально и по скорингу, можно сказать,что разделение на 4 кластера best!

6.Сравнение кластеризаций

Решение

Окончательный выбор!!! Я решил выбрать K-Means с 4 кластерами , тк нет серьезных недостатков, хорошие оценки, хорошо заметны визуально зависимости от парного графика и вообще кайфовый алгоритм!

Теперь давайте добавим метки k-средних к исходным данным

Label 1

Прогноз : могут быть некоторые города в отдаленных или туристско-курортных зонах

Label 2

Прогноз: Самый маленький кластер, но самые большие города Америки. Из-за размера группы я могу посмотреть на все факторы и четко все определить.

Label 3

Прогноз: small towns

Label 4

Прогноз: могут быть большие города, но не прям Moscow-city.

Карта

Выводы по карте:

Общий вывод

Я считаю, что результаты кластеризации good. Прослеживается логика.